package com.four.peoplemanage.information.service;

import com.four.peoplemanage.common.bean.Page;
import com.four.peoplemanage.information.dao.InformationDao;
import com.four.peoplemanage.information.entity.Information;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.text.SimpleDateFormat;
import java.util.Collections;
import java.util.Date;
import java.util.List;

@Service
public class InformationService {
    @Autowired
    private InformationDao informationDao;
    //查看员工（合同工）
   public Page<Information> getOnrePage(int pageNum, int pageSize, String name, Integer number,
                                        String sex, String employee,
                                        String grade, String duties,
                                        String education, String marriage){
       //计算起始位置
       int start=(pageNum-1)*pageSize;
       //获取分页的数据
       List<Information> list=informationDao.canInformation(start,pageSize,name,number,sex,employee,grade,duties,education,marriage);
       //获取总条目数
       int total=informationDao.countInformation(name,number,sex,employee,grade,duties,education,marriage);
       //计算总页数
       int pages =(int) (total % pageSize == 0 ? total / pageSize : total / pageSize + 1);
       //创建分页对象
       Page<Information> page=new Page<>();
       page.setRecords(list);
       page.setTotal(total);
       page.setPages(pages);
       page.setCurrent(pageNum);
       page.setSize(pageSize);
       return page;
   }

    //查看外聘工
    public Page<Information> getOnrePage1(int pageNum, int pageSize, String name, Integer number,
                                         String sex, String employee,
                                         String grade, String duties,
                                         String education, String marriage){
        //计算起始位置
        int start=(pageNum-1)*pageSize;
        //获取分页的数据
        List<Information> list=informationDao.canInformation1(start,pageSize,name,number,sex,employee,grade,duties,education,marriage);
        //获取总条目数
        int total=informationDao.countInformation1(name,number,sex,employee,grade,duties,education,marriage);
        //计算总页数
        int pages =(int) (total % pageSize == 0 ? total / pageSize : total / pageSize + 1);
        //创建分页对象
        Page<Information> page=new Page<>();
        page.setRecords(list);
        page.setTotal(total);
        page.setPages(pages);
        page.setCurrent(pageNum);
        page.setSize(pageSize);
        return page;
    }


    //查看所有
    public List<Information> selectAll(){
       return informationDao.selectAll();
    }

   //新增员工
   public boolean addPeople(Information information) {
       if (information == null) {
           return false;
       }

       // 生成工号
       String generatedNumber = generateSerialNumber();
       information.setNumber(generatedNumber);

       // 插入数据库
       return informationDao.insertInformation(information) > 0;
   }

    private String generateSerialNumber() {
        // 格式化当前日期时间为 YYMMDDHHmmss
        SimpleDateFormat timeFormat = new SimpleDateFormat("yyMMddHHmmss");
        String dateTimePart = timeFormat.format(new Date());

        // 获取当前序列号
        int serialNumber = getSerialNumber(dateTimePart);

        // 生成新的工号
        return dateTimePart + String.format("%02d", serialNumber);
    }

    private int getSerialNumber(String dateTimePart) {
        // 这里需要实现获取当前序列号的逻辑
        // 例如，可以查询数据库中已有的最大序列号，并加一
        // 为了简化示例，这里直接返回 1
        // 在实际应用中，你需要确保这个方法在并发环境下也能正确工作
        return 1;
    }

    //批量新增
    public boolean add(Information information) {
        if (information == null) {
            return false;
        }
        // 将单个对象封装为列表
        List<Information> informationList = Collections.singletonList(information);
        // 调用 DAO 层的 insert 方法
        return informationDao.insert(informationList) > 0;
    }

    public boolean addAll(List<Information> informationList) {
        if (informationList == null || informationList.isEmpty()) {
            return false;
        }
        return informationDao.insert(informationList) > 0;
    }

    //修改员工信息
    public boolean updatePeople(Information information){
        if (information == null) {
            return false;
        }
        return informationDao.update(information) > 0;
    }
    //修改员工状态
    public Boolean approve(Integer id){
       return informationDao.updatestatus(id,1)>0;
    }
    public Boolean reject(Integer id){
        return informationDao.updatestatus(id,0)>0;
    }

    //删除员工
    public boolean del(Integer id){
        if (id==null){
            return false;
        }
        return informationDao.del(id)>0;
    }
}
